import axios from 'axios'
// 引入提示框
import { Toast } from 'vant'
import Vue from 'vue'
import { Store } from 'vuex'
import router from '@/router/index.js'
import { getLocal, removeLocal, setLocal } from '../utils/local'

// 返回（修改完默认配置的axios副本）= axios.create({
// 希望修改的默认配置
// })
// 配置基地址
const _axios = axios.create({
  baseURL: 'http://47.115.7.4'
})
// 挂载原型
Vue.prototype.$axios = _axios
// 添加请求拦截器
_axios.interceptors.request.use(
  function (config) {
    // 在发送请求之前做些什么
    // 判断是否需要token
    if (config.needToken) {
      config.headers.authorization = getLocal('token')
    }
    return config
  },
  function (error) {
    // 对请求错误做些什么
    return Promise.reject(error)
  }
)

// 添加响应拦截器
_axios.interceptors.response.use(
  function (response) {
    // 对响应数据做点什么 成功返回数据
    if (response.data.code === undefined) {
      Storage.removeLocal('token') // 删除已经过期token
      router.replace({
        path: '/login' // 到登录页面重新获取
      })
    } else if (response.data.token) {
      // 判断token是否存在,存在即需要更新
      setLocal('token', response.data.token)
    }
    return response
  },
  function (error) {
    // 对响应错误做点什么
    // 判断登录返回码为2321则为用户名或密码错误
    if (error.response.code === 2321) {
      Toast.fail('用户名或密码不正确')
      // 删除toke
      removeLocal('token')
      // 设置登录状态
      Store.commit('setIsLogin', false)
      // 跳转到登录页面
      router.push('/login')
    }

    return Promise.reject(error)
  }
)

// 暴露出去
export default _axios
